home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / Z-Misc Series / (k)zd.d64 / txt.machine lang < prev    next >
Text File  |  2007-03-01  |  3KB  |  156 lines

  1. ═┴├╚╔╬┼ ╠┴╬╟╒┴╟┼ ╔╬ ├╧═┴╠ ╔╘╙┼╠╞
  2.  
  3. BY ─ICK ╦LINGENS,
  4. ─UTCH ├╧═┴╠ ╒SERS ╟ROUP
  5.  
  6. ╙OMETIMES WE DO NEED MACHINE
  7. LANGUAGE, EVEN WHEN USING THE ├╧═┴╠
  8. CARTRIDGE. ╔N THAT CASE WE CAN PLACE
  9. THE MACHINE CODE IN SOME EMPTY
  10. ADDRESSES SUCH AS ╥╙232 OR TAPE
  11. BUFFER OR IN A PACKAGE. ┬UT WHAT TO
  12. DO, WHEN WE DO NOT KNOW THE UNUSED
  13. SPOTS IN MEMORY OR WHEN WE NEED MORE
  14. THAN THE AVAILABLE ROOM? ╘HE ANSWER
  15. IS: "CREATE MORE ROOM IN ├╧═┴╠ ITSELF
  16. BY DEFINING A STRING".
  17.  
  18. ╘HE STATEMENTS:
  19.  
  20.    ─╔═ CODE$ ╧╞ 500
  21.    CODE$:=╙╨├$(500)
  22.  
  23. ALLOCATE A STRING BLOCK OF 2+2+500
  24. BYTES IN WHICH WE CAN USE 500 BYTES.
  25. ╘HE FIRST TWO BYTES CONTAIN THE
  26. DIMENSIONED LENGTH OF THE STRING; THE
  27. SECOND TWO THE ACTUAL LENGTH OF THE
  28. STRING. ╘HE 500 BYTES CAN BE USED TO
  29. POKE OUR MACHINE CODE IN. ╘O DO THIS
  30. WE NEED TO KNOW WHERE THE STRING
  31. BLOCK IS LOCATED IN MEMORY.
  32.  
  33. ╫E SHALL DESCRIBE A SMALL PACKAGE
  34. DOING THE SAME AS IN THE FOLLOWING
  35. PROGRAM:
  36.  
  37.    ─╔═ A$ ╧╞ 500
  38.    ╨╥╔╬╘ STRPTR(A$)
  39.    ┼╬─
  40.    //
  41.    ╞╒╬├ STRPTR(╥┼╞ X$) ├╠╧╙┼─
  42.      ...
  43.      ╥┼╘╒╥╬ ADDRESS
  44.    ┼╬─╞╒╬├ STRPTR
  45.  
  46. ╘HE VARIABLE IN THE FUNCTION IS A ╥┼╞
  47. VARIABLE, BECAUSE WE WANT TO KNOW THE
  48. STRING BLOCK OF THE REFERENCED
  49. VARIABLE. ╘HE STRING BLOCK OF A ╥┼╞
  50. STRING VARIABLE HAS THE FOLLOWING
  51. FORMAT:
  52.  
  53. (COPY1)+0  +---------+
  54.            !  M      !   HIGH BYTE
  55.            !         !   LOW BYTE
  56.            +---------+
  57. (COPY1)+2  !  N      !   HIGH BYTE
  58.            !         !   LOW BYTE
  59.            +---------+
  60. (COPY1)+4  ! X$(1:1) !
  61.            +---------+
  62.            ! X$(2:2) !
  63.            +---------+
  64.            .         .
  65.            .         .
  66.            +---------+
  67.    +4+N-1  !X$(N:N)  !
  68.            +---------+
  69.  
  70. IN WHICH
  71.  
  72. ═:     THE MAXIMUM STRING LENGTH
  73.        (DIMENSIONED LENGTH)
  74. ╬:     ACTUAL STRING LENGTH
  75. ├╧╨┘1: A VECTOR TO THE STRING BLOCK.
  76.  
  77. ╬OW FOLLOWS THE PACKAGE DESCRIPTION.
  78.  
  79. * = $8009
  80. ;
  81. ; CONSTANTS, VARIABLES, ROUTINES
  82. ;
  83. FUNC   = 227
  84. ENDFNC = 126
  85. REAL   = 0
  86. STR    = 2
  87. REF    = 117
  88. DEFPAG = %01000110
  89. COPY1  = $0045
  90. FNDPAR = $C896
  91. PSHINT = $C9DE
  92. DUMMY  = $CA2F
  93. ;
  94. ; MODULE DESCRIPTION
  95. ;
  96.        .BYT DEFPAG
  97.        .WOR LEND
  98.        .WOR DUMMY
  99.        .BYT 2,'ML'   ; PACKAGE NAME
  100.        .WOR PROCT    ; TABLE
  101.        .WOR DUMMY
  102.        .BYT 0
  103. PROCT  .BYT 6,'STRPTR'
  104.        .WOR HSTR     ; HEADER
  105.        .BYT 0
  106. HSTR   .BYT FUNC+REAL,<PTR,>PTR,1
  107.        .BYT REF+STR
  108.        .BYT ENDFUNC
  109. ;
  110. PTR    LDA #1       ; .A:=1
  111.        JSR FNDPAR   ; COPY1:=ADDRESS
  112.        CLC
  113.        LDA COPY1    ; .A:=LO ADDRESS
  114.        ADC #4       ; .A:+4
  115.        TAX          ; .X:=.A
  116.        LDA COPY1+1  ; .A:=HI ADDRESS
  117.        ADC #0
  118. ;
  119. ; NOW .X=LO ADDRESS
  120. ;     .A=HI ADDRESS
  121. ; PUSH ADDRESS ON ├╧═┴╠ STACK
  122. ;
  123.        JSR PSHINT
  124.        RTS          ; RETURN TO ├╧═┴╠
  125. LEND   .END         ; END OF MODULE
  126.  
  127. ╫E CAN USE THE PACKAGE STORED IN THE
  128. FILE 'OBJ.MCCOMAL' AFTER
  129.  
  130.    ╠╔╬╦ "OBJ.MCCOMAL'
  131.  
  132. IN THE (INCOMPLETE) PROGRAM:
  133.  
  134. ╒╙┼ ML
  135. SETUP'ML
  136. EXECUTE(ADDRESS)
  137. //
  138. ╨╥╧├ SETUP'ML
  139.  ─╔═ CODE$ ╧╞ 500
  140.  CODE$:=╙╨├$(500)
  141.  ADDRESS:=STRPTR(CODE$)
  142.  LOC:=ADDRESS
  143.  ╫╚╔╠┼ ╬╧╘ ┼╧─ ─╧
  144.   ╥┼┴─ BYTE
  145.   ╨╧╦┼ LOC, BYTE
  146.   LOC:+1
  147.  ┼╬─╫╚╔╠┼
  148.  // MACHINE CODE FOLLOWS
  149.  ─┴╘┴ ...
  150.  ─┴╘┴ ...
  151. ┼╬─╨╥╧├ SETUP'ML
  152. //
  153. ╨╥╧├ EXECUTE(ADDR)
  154.  ╙┘╙ ADDR
  155. ┼╬─╨╥╧├ EXECUTE'ML
  156.